#include <stdio.h> // perror()
#include <fcntl.h> // open()
#include <stdlib.h> // exit()
#include <unistd.h> // read()/write()/close()

/**
 * @brief 主函数，程序的入口点
 * 
 * 此函数用于打开一个文件进行读取，并将其内容写入另一个文件，同时输出到控制台。
 * 
 * @param argc 命令行参数的数量
 * @param argv 命令行参数的数组
 * @return int 返回程序的退出状态码，0 表示成功，-1 表示失败
 */
int main(int argc, char const *argv[])
{
    //1.打开读/写文件流
    int read_fd = open("love.txt", O_RDONLY);
    // 检查文件是否成功打开
    if (read_fd == -1)
    {
        printf("打开读文件失败\n");
        return -1;
    }
    // 以只写模式打开名为 "love2.txt" 的文件，如果文件不存在则创建
    int write_fd = open("love2.txt", O_CREAT|O_WRONLY|O_APPEND  , 0644);
    if (write_fd == -1)
    {
        printf("打开写文件失败\n");
        return -1;
    }
    
    // 2. 不断边读边写，并输出到控制台
    // 定义一个大小为 1024 的字符数组作为缓冲区
    char buffer[1024];
    // 用于存储每次读取的字节数
    ssize_t read_len;
    // 循环读取文件内容，直到文件结束
    while ((read_len = read(read_fd, buffer, sizeof(buffer))) > 0)
    {
        // 将读取的内容写入到 "love2.txt" 文件中
        write(write_fd, buffer, read_len);
        // 将读取的内容输出到控制台
        write(STDOUT_FILENO, buffer, read_len);
    }
    
    // 关闭文件流
    // 关闭读文件
    close(read_fd);
    // 关闭写文件
    close(write_fd);
    // 返回 0 表示程序执行成功
    return 0;
}
